#ifndef __SETTINGS_H__
#define __SETTINGS_H__

// Qt Includes
#include <QMap>

// Local Includes
#include "option.h"

// ******************************************************************
// CSettings
// ******************************************************************
class CSettings
{
public:
// Construction & Destruction
    CSettings(const QString &strName = QString());

// Member Functions
    /////////////////////////////////////////////////////////////////////
    // Options
    /////////////////////////////////////////////////////////////////////
    void setOptionByName(const QString &strName, const COption &option);
    COption getOptionByName(const QString &strName) const;

	int getOptionCount() const;
    const QMap<QString, COption>& getAllOptions() const;
    /////////////////////////////////////////////////////////////////////

    /////////////////////////////////////////////////////////////////////
    // Settings
    /////////////////////////////////////////////////////////////////////
    void setSettingsByName(const QString &strName, const CSettings &settings);
    CSettings getSettingsByName(const QString &strName);

	int getSettingsCount() const;
    const QMap<QString, CSettings>& getAllSettings() const;
    /////////////////////////////////////////////////////////////////////

    /////////////////////////////////////////////////////////////////////
    // Serialisation
    /////////////////////////////////////////////////////////////////////
    bool saveSettings(QDomDocument &domDocument,
		QDomElement &domElement) const;
    bool loadSettings(const QDomElement &domElement);
    /////////////////////////////////////////////////////////////////////

    /////////////////////////////////////////////////////////////////////
    // Convenience Functions
    /////////////////////////////////////////////////////////////////////
    bool hasOption(const QString &strOptionName) const;
    bool hasSettings(const QString &strSettingsName) const;

    /////////////////////////////////////////////////////////////////////

private:
// Member Variables
    QString m_strName;
    QMap<QString, COption> m_mapOptions;
    QMap<QString, CSettings> m_mapSettings;
};

#endif // #ifndef __SETTINGS_H__
